import { getCurrentInstance } from 'vue';

/**
 * 获取单个节点信息
 * @param {string} selector - 节点选择器（如 '#id'、'.class'）
 * @returns {Promise<Object>} 节点信息对象（含宽高、位置等）
 */
export const getNodeInfo = selector => {
	return new Promise(resolve => {
		// 获取当前组件实例
		const instance = getCurrentInstance();
		if (!instance) {
			console.error('无法获取组件实例，无法查询节点');
			resolve(null);
			return;
		}

		// 创建选择器查询并绑定当前组件上下文
		const query = uni.createSelectorQuery().in(instance.proxy);

		// 执行查询
		query
			.select(selector)
			.boundingClientRect(data => {
				if (!data) {
					console.warn(`未找到选择器为 "${selector}" 的节点`);
					resolve(null);
					return;
				}
				resolve(data); // 返回节点信息（width/height/top/left等）
			})
			.exec();
	});
};

/**
 * 获取多个节点信息
 * @param {string} selector - 节点选择器（如 '.item'）
 * @returns {Promise<Array>} 节点信息数组
 */
export const getNodesInfo = selector => {
	return new Promise(resolve => {
		const instance = getCurrentInstance();
		if (!instance) {
			console.error('无法获取组件实例，无法查询节点');
			resolve([]);
			return;
		}

		const query = uni.createSelectorQuery().in(instance.proxy);
		query
			.selectAll(selector)
			.boundingClientRect(data => {
				resolve(data || []); // 返回节点信息数组
			})
			.exec();
	});
};

/**
 * 获取节点的自定义数据（data-* 属性）
 * @param {string} selector - 节点选择器
 * @returns {Promise<Object>} 节点的 dataset 数据
 */
export const getNodeDataset = selector => {
	return new Promise(resolve => {
		const instance = getCurrentInstance();
		if (!instance) {
			console.error('无法获取组件实例，无法查询节点数据');
			resolve({});
			return;
		}

		const query = uni.createSelectorQuery().in(instance.proxy);
		query
			.select(selector)
			.fields({ dataset: true }, data => {
				resolve(data?.dataset || {});
			})
			.exec();
	});
};
